Currently, hypertext transfer protocol (HTTP) Live Streaming (“HLS”) is a popular media streaming protocol. According to the HLS protocol, a media stream is divided into a sequence of HTTP-based file downloads, or “chunks.” One feature of HLS is that the client can select the bitrate of the media stream from a plurality of predefined bitrates. The media file to be downloaded may be pre-encoded at the variable bitrates and stored at a server, such that upon the client selecting a particular bitrate, the server serving the media stream begins to serve chunks of the media stream encoded at the selected bitrate. One issue with HLS is that the client assumes a certain model of how the server operates and is in charge of determining the bitrate for the media stream. Furthermore, the client assumes that the server has all the pieces of the stream pre-encoded and split in each of the variable bitrates.